﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace HMS
{
    public partial class ucQuanhuyen : UserControl
    {
        private string sGetID;
        private SqlConnection con = new SqlConnection(FRM_Manhinhchinh.sConn);
        private SqlDataAdapter daLoadDistrict, dataAp;
        private int iIndex, iIDex;
        private bool bUpdate, bCheck;
        private List<string> list;
        private SqlCommand cmd1, cmd2;
        private DataTable tbLoadDistrict, dataTable;
        private string cityID;

        public string CityID
        {
            get { return cityID; }
            set { cityID = value; }
        }

        public ucQuanhuyen()
        {
            InitializeComponent();
            
        }

        private void ucQuanhuyen_Load(object sender, EventArgs e)
        {
            if (cityID == "0")
            {
                load_data();
            }
            else
            {
                load_data_City();
            }
            SqlDataAdapter da = new SqlDataAdapter("Select City_Name from tblCity", con);
            DataTable tb = new DataTable();
            da.Fill(tb);
            cmbTinhthanhpho.DataSource = tb;
            cmbTinhthanhpho.DisplayMember = "City_Name";
        }
        public void load_data()
        {
            daLoadDistrict = new SqlDataAdapter("select District_ID , District_Name, District_Status from tblDistrict ", con);
            tbLoadDistrict = new DataTable();
            daLoadDistrict.Fill(tbLoadDistrict);
            gridControl1.DataSource = tbLoadDistrict;
        }// end load_data
        public void load_data_City()
        {
            daLoadDistrict = new SqlDataAdapter("select District_ID , District_Name, District_Status from tblDistrict where city_id='"+cityID+"'", con);
            tbLoadDistrict = new DataTable();
            daLoadDistrict.Fill(tbLoadDistrict);
            gridControl1.DataSource = tbLoadDistrict;
        }// end load_data

        public DataTable GetDataTable(string sql)
        {
            // Tạo dataApdapter, thực hiện câu lệnh query
            dataAp = new SqlDataAdapter(sql, con);
            // Đổ dữ liệu vào DataTable
            dataTable = new DataTable();
            dataAp.Fill(dataTable);
            return dataTable;
        }
        private void Load_ListCity()
        {
            AutoCompleteStringCollection auto = new AutoCompleteStringCollection();
            // Add từng item trong bảng tblcity vào danh sách Auto Complete
            foreach (DataRow item in dataTable.Rows)
                auto.Add(item["city_name"].ToString());
            // Thực hiện auto complete cho combobox
            cmbTinhthanhpho.AutoCompleteMode = AutoCompleteMode.Append;
            cmbTinhthanhpho.AutoCompleteSource = AutoCompleteSource.CustomSource;
            cmbTinhthanhpho.AutoCompleteCustomSource = auto;
            cmbTinhthanhpho.AutoCompleteMode = AutoCompleteMode.Suggest;
            cmbTinhthanhpho.AutoCompleteSource = AutoCompleteSource.CustomSource;
            cmbTinhthanhpho.AutoCompleteCustomSource = auto;
        }// end Load_ListCity

        public void setdata(string s)
        {
            // Gán dữ liệu lấy từ DB vào data table
            string sSQL = "select c.city_name, d.district_name, d.district_id, d.district_status from tblcity c, tbldistrict  d where d.district_id ='" + s
                + "' and d.city_id = c.city_id";
            GetDataTable(sSQL);
            // Gán text cho textbox
            cmbTinhthanhpho.Text = dataTable.Rows[0]["City_Name"].ToString();
            txtMaquanhuyen.Text = dataTable.Rows[0]["District_ID"].ToString();
            txtTenquanhuyen.Text = dataTable.Rows[0]["District_Name"].ToString();
            // Đọc từ DB set true, false cho nút check "Kích hoạt"
            if (dataTable.Rows[0]["District_Status"].ToString() == "True")
                ckKichhoat.Checked = true;
            else ckKichhoat.Checked = false;
            //load thành phố
            Load_ListCity();

        }
 
        private void clear_Contents()
        {
            txtMaquanhuyen.Text = null;
            txtTenquanhuyen.Text = null;
            cmbTinhthanhpho.Enabled = true;
            ckKichhoat.Checked = false;
        }// end enable_Button

        private void btnHuy_Click(object sender, EventArgs e)
        {
           if (bUpdate == false)
            {
                DialogResult dr = MessageBox.Show("Bạn chắc chắn muốn hủy thao tác này ?", "Thông báo", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes) btnThemquanhuyen_Click(null, null);
                else return;

            }// end if
            else
            {
                // Kiểm tra dữ liệu có thay đổi chưa

                DialogResult dr = MessageBox.Show("Bạn chắc chắn muốn hủy thao tác này ?", "Thông báo", MessageBoxButtons.YesNo);
                if (dr == DialogResult.Yes) btnCapnhat_Click(null, null);
                else return;

            }// end else
        }
        private bool controlKey = false;
        private void cmbTinhthanhpho_KeyPress(object sender, KeyPressEventArgs e)
        {
            base.OnKeyPress(e);
            if (e.KeyChar == (int)Keys.Escape)
            {
                cmbTinhthanhpho.SelectedIndex = -1;
                cmbTinhthanhpho.Text = "";
                controlKey = true;
            }
            else
            {
                if (Char.IsControl(e.KeyChar))
                {
                    controlKey = true;
                }
                else
                {
                    controlKey = false;
                }
            }
        }

        private void cmbTinhthanhpho_TextChanged(object sender, EventArgs e)
        {
            base.OnTextChanged(e);
            if (cmbTinhthanhpho.Text != "" && !controlKey)
            {
                string matchtext = cmbTinhthanhpho.Text;
                int match = cmbTinhthanhpho.FindString(matchtext);
                if (match != -1)
                {
                    cmbTinhthanhpho.SelectedIndex = match;
                    cmbTinhthanhpho.SelectionStart = matchtext.Length;
                    cmbTinhthanhpho.SelectionLength = cmbTinhthanhpho.Text.Length - cmbTinhthanhpho.SelectionStart;
                }
            }
        }
        private void gridControl1_Click(object sender, EventArgs e)
        {
            // enable button
            btnHuy.Enabled = false;
            txtTenquanhuyen.Enabled = false;
            txtMaquanhuyen.Enabled = false;
            cmbTinhthanhpho.Enabled = false;
            ckKichhoat.Enabled = false;
            btnLuu.Enabled = false;
            iIndex = gridView1.FocusedRowHandle;
            sGetID = gridView1.GetRowCellValue(iIndex, "District_ID").ToString();
            setdata(sGetID);
        }

        private void gridControl1_DoubleClick(object sender, EventArgs e)
        {
            txtMaquanhuyen.Enabled = false;
            txtTenquanhuyen.Enabled = false;
            cmbTinhthanhpho.Enabled = false;
        }
        private void btnCapnhat_Click(object sender, EventArgs e)
        {
            txtMaquanhuyen.Enabled = false;
            txtTenquanhuyen.Enabled = true;
            cmbTinhthanhpho.Enabled = true;
            bUpdate = true;
            ckKichhoat.Enabled = true;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
        }
        // Kiểm tra quận huyện đã tồn tại chưa
        private bool Check_District(string s)
        {
            string sql = "select District_Name from tblDistrict where District_Name = '" + s + "'";
            SqlCommand cmdCheck = new SqlCommand(sql, con);
            con.Open();
            SqlDataReader dr;
            dr = cmdCheck.ExecuteReader();
            if (dr.Read() == true) bCheck = false;
            else bCheck = true;
            con.Close();
            return bCheck;
        }// end
        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (txtMaquanhuyen.Text == "" || txtTenquanhuyen.Text == "")
            {
                MessageBox.Show("Vui lòng nhập dữ liệu vào ô trống!", "Thông báo!", MessageBoxButtons.OK);
            }
            else
            {
                // Khai báo biến
                GetDataTable("select city_id from tblcity where city_name = N'" + cmbTinhthanhpho.Text + "'");
                cityID = dataTable.Rows[0]["city_id"].ToString();
                list = new List<string>();
                iIDex = cmbTinhthanhpho.SelectedIndex;
                string sMaQH = txtMaquanhuyen.Text,
                        sTenQH = txtTenquanhuyen.Text,
                        sAcc;
                // Trạng thái là Lưu người dùng hay Tạo người dùng
                switch (bUpdate)
                {
                    // Trạng thái tạo mới
                    case false:
                        SqlConnection con1 = new SqlConnection(FRM_Manhinhchinh.sConn); // Tạo kết nối DB
                        if (ckKichhoat.Checked == true) sAcc = "True";
                        else sAcc = "False";
                        string sCmdInsertDistrict = "insert into tblDistrict values ('" + "','"
                            + sMaQH + "',N'" + sTenQH + "','" + cityID + "','" + sAcc + "')";
                         if (Check_District(sTenQH) == true)
                        {
                            con1.Open(); // Mở kết nối DB
                            cmd1 = new SqlCommand(sCmdInsertDistrict, con1); // Câu lệnh Insert dữ liệu vào DB                    
                            cmd1.ExecuteNonQuery(); // Thực thi lệnh SqlCommand

                            con1.Close(); // Đóng kết nối DB
                            MessageBox.Show("Tạo mới quận huyện thành công !");
                            load_data_City(); // Load lại data lên gridControl
                        }
                        else MessageBox.Show("Quận huyện đã tồn tại !");
                        break;
                    //Trạng thái cập nhật.
                    case true:
                        SqlConnection con2 = new SqlConnection(FRM_Manhinhchinh.sConn); // Tạo kết nối DB
                        if (ckKichhoat.Checked == true) sAcc = "True";
                        else sAcc = "False";
                        string sCmdUpdateClinic = "update tblDistrict set District_Name =N'" +
                            sTenQH + "', District_Status = '" + sAcc
                            + "' where District_ID = '" + sMaQH + "'";
                        con2.Open(); // Mở kết nối DB
                        cmd2 = new SqlCommand(sCmdUpdateClinic, con2); // Câu lệnh Insert dữ liệu vào DB                    
                        cmd2.ExecuteNonQuery(); // Thực thi lệnh SqlCommand

                        con2.Close(); // Đóng kết nối DB
                        MessageBox.Show("Cập nhật quận huyện thành công !");
                        load_data_City(); // Load lại data lên gridControl
                        break;
                }
            }
        }

        private void btnThemquanhuyen_Click(object sender, EventArgs e)
        {
            txtMaquanhuyen.Enabled = true;
            txtTenquanhuyen.Enabled = true;
            cmbTinhthanhpho.Enabled = true;
            ckKichhoat.Enabled = true;
            bUpdate = false;
            btnLuu.Enabled = true;
            btnHuy.Enabled = true;
            clear_Contents();
        }

        private void cmbTinhthanhpho_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetDataTable("select city_id from tblcity where city_name = N'" + cmbTinhthanhpho.Text + "'");
            cityID = dataTable.Rows[0]["city_id"].ToString();
            txtMaquanhuyen.Text = cityID;
        }

    }
    public delegate void LoadCity();
}
